﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;

namespace RecommendatioNetwork
{
    [Serializable()]
    public class Configuration
    {
        #region Defualt Values
        /// <summary>
        /// La porta su cui viene avviato il servizio.
        /// </summary>
        private int port=8181;
        /// <summary>
        /// Nome del servizio avviato.
        /// </summary>
        private string serviceName="Recommendation";
        /// <summary>
        /// Massimo numero di vicini conservato.
        /// </summary>
        private uint maxNumberOfNeighbor=20;
        /// <summary>
        /// Peso attribuito al ranking dei vicini migliori. 0=considero solo connessione; 100=considero solo risposte.
        /// </summary>
        private uint weightConnectedVSResponder=50;
        /// <summary>
        /// Tempo di vita del pacchetto di ricerca
        /// </summary>
        private uint timeToLive=10;
        /// <summary>
        /// Valore che indica il periodo di validità di una ricerca
        /// </summary>
        private TimeSpan periodOfValidateSearch = new TimeSpan(30, 0, 0, 0);
        /// <summary>
        /// Valore che indica la dimensione di una cache che ha il compito di non rimandare due volte la stessa risposta
        /// </summary>
        private uint dimCacheServedPeer=5;
        /// <summary>
        /// Valore che indica la cadenza dello Spooler defualt 5
        /// </summary>
        private TimeSpan cadenceSpooler = new TimeSpan(0, 0, 5);
        /// <summary>
        /// Valore che indica il numero di volte in cui lo spooler deve ritentare l'invio default 20
        /// </summary>
        private uint numberOfResending=20;
#endregion
        #region Properties
        /// <summary>
        /// Proprietà che indica il massimo numero di vicini
        /// </summary>
        public uint MaxNumberOfNeighbor
        {
            get { return maxNumberOfNeighbor; }
            set { maxNumberOfNeighbor = value; }
        }
        /// <summary>
        ///  Proprietà che indica il time to Live di un pacchetto
        /// </summary>
        public uint TTL
        {
            get { return timeToLive; }
            set { timeToLive = value; }
        }
        /// <summary>
        /// Proprietà che indica il periodo di validità di una ricerca
        /// </summary>
        public TimeSpan PeriodOfValidateSerch
        {
            get { return periodOfValidateSearch; }
            set { periodOfValidateSearch = value; }
        }
        /// <summary>
        /// Proprietà che indica la dimensione di una cache che ha il compito di non rimandare due volte la stessa risposta
        /// </summary>
        public uint DimCacheServedPeer
        {
            get { return dimCacheServedPeer; }
            set { dimCacheServedPeer = value; }
        }

        /// <summary>
        /// Proprietà che indica la cadenza dello Spooler defualt 5
        /// </summary>
        public TimeSpan CadenceSpooler
        {
            get { return cadenceSpooler; }
            set { cadenceSpooler = value; }
        }
        /// <summary>
        /// Proprietà che indica il numero di volte in cui lo spooler deve ritentare l'invio default 20
        /// </summary>
        public uint NumberOfResending
        {
            get { return numberOfResending; }
            set { numberOfResending = value; }
        }
        /// <summary>
        /// Proprieta che indica la porta di Serivizio
        /// </summary>
        public int Port
        {
            get { return port; }
            set { port = value; }
        }
        /// <summary>
        /// Proprieta che indica il rapporto tra peso delle connessioni e peso delle risposte
        /// </summary>
        public uint WeightConnectedVSResponder
        {
            get { return weightConnectedVSResponder; }
            set { 
                if(value<0)
                    weightConnectedVSResponder = 0;
                else if(value>100)
                    weightConnectedVSResponder = 100;
                else
                weightConnectedVSResponder = value; 
            }
        }
        /// <summary>
        /// Proprieta che indica il Nome del servizio
        /// </summary>
        public string ServiceName
        {
            get { return serviceName; }

        }


        #endregion
    }

}
